package com.codeblock_;

/**
 * @Author 小闽
 * @Date 2024/9/9 9:00
 * @PackageName: com.codeblock_
 * @ClassName: CodeBlockDetail3
 * @Description: 代码块细节03
 * @Version 1.0
 */
public class CodeBlockDetail3 {
    public static void main(String[] args) {
        // 实例化BBB对象
        // 执行顺序为
        // 1、AAA的构造方法被执行...
        // 2、BBB的构造方法被执行...

        // 此时执行的顺序为
        // 1、AAA的静态代码块被执行...
        // 2、BBB的静态代码块被执行...
        // 3、AAA的非静态代码块被执行...
        // 4、AAA的构造方法被执行...
        // 5、BBB的构造方法被执行...
        BBB bbb = new BBB();

    }
}

class AAA{
    // 静态代码块
    static {
        System.out.println("AAA的静态代码块被执行...");
    }
    // 非静态代码块
    {
        System.out.println("AAA的非静态代码块被执行...");
    }
    /**
     * 构造方法
     */
    public AAA() {
        System.out.println("AAA的构造方法被执行...");
    }
}

class BBB extends AAA{
    // 静态代码块
    static {
        System.out.println("BBB的静态代码块被执行...");
    }
    /**
     * 构造方法
     */
    public BBB() {
        // 因为有super()方法，所以会先执行父类中的构造器，然后再执行子类的构造器
        System.out.println("BBB的构造方法被执行...");
    }
}
